home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Oh!X 2001 Spring
/
Oh!X 2001 Spring Special CD-ROM (Japan).7z
/
Oh!X 2001 Spring Special CD-ROM (Japan) (Track 1).bin
/
GALAXY
/
ohx5-1
/
control.cpp
< prev
next >
Wrap
C/C++ Source or Header
|
2001-01-10
|
2KB
|
81 lines
/*
OH!X5号
GalaxyKnightsサンプル1
制御入力部分
アクションマッピング非対応版
*/
/* ヘッダーインクルード */
#include "stdafx.h"
#include "ohx5_1.h"
#include <dinput.h>
LPDIRECTINPUT8 lpDI=NULL; // DirectInput8オブジェクト
LPDIRECTINPUTDEVICE8 lpDID=NULL; // DirectInput8デバイスオブジェクト
// Keyboard からの入力にDirectInput を初期化
bool init_input()
{
HRESULT hr;
DIPROPDWORD dw;
// DIRECTINPUT7オブジェクト確保
hr = DirectInput8Create(hInstApp,DIRECTINPUT_VERSION,IID_IDirectInput8,(void **)&lpDI,NULL );
if( FAILED(hr) ) return false;
// DirectX8デバイスオブジェクトを、キーボードに対して用意
hr = lpDI->CreateDevice( GUID_SysKeyboard,&lpDID,NULL );
if( FAILED(hr) ) return false;
hr = lpDID->SetDataFormat(&c_dfDIKeyboard );
if( FAILED(hr) ) return false;
hr = lpDID->SetCooperativeLevel( hwndApp,DISCL_NONEXCLUSIVE | DISCL_FOREGROUND);
if( FAILED(hr) ) return false;
// バッファ・サイズを設定
dw.diph.dwSize = sizeof(DIPROPDWORD);
dw.diph.dwHeaderSize = sizeof(DIPROPHEADER);
dw.diph.dwObj = 0;
dw.diph.dwHow = DIPH_DEVICE;
dw.dwData = sizeof(DIDEVICEOBJECTDATA) * 100;
lpDID->SetProperty(DIPROP_BUFFERSIZE, (LPCDIPROPHEADER)&dw);
// 入力制御開始
lpDID->Acquire();
return true;
}
// 入力キーコードから、ゲームの内部処理コードを生成
// 何でわざわざそうするかというと、DirectInputを隠蔽するためと、
// 入力装置がキーボード以外になってもここで差を吸収し、
// 互換性を保つ事が出来るようにするため。
WORD GetKeys()
{
BYTE keys[256];
HRESULT hr;
WORD ret;
ret = 0;
hr = lpDID->GetDeviceState(256,keys);
if( hr == DIERR_INPUTLOST ){
lpDID->Acquire();
} else {
if( keys[DIK_SPACE ] & 0x80 ){ ret |= PAD_SHOOT; }
if( keys[DIK_LSHIFT ] & 0x80 ){ ret |= PAD_FORWARD; }
if( keys[DIK_LCONTROL ] & 0x80 ){ ret |= PAD_CMD; }
if( keys[DIK_Z ] & 0x80 ){ ret |= PAD_LOCK; }
if( keys[DIK_UPARROW ] & 0x80 ){ ret |= PAD_UP; }
if( keys[DIK_LEFTARROW ] & 0x80 ){ ret |= PAD_LEFT; }
if( keys[DIK_RIGHTARROW] & 0x80 ){ ret |= PAD_RIGHT; }
if( keys[DIK_DOWN ] & 0x80 ){ ret |= PAD_DOWN; }
}
return ret;
}
// DirectInput終了処理
void release_input()
{
xRelease( lpDID );
xRelease( lpDI );
}